package cn.itcast.scala.course09

import scala.xml.XML

/**
  * scala XML的属性操作
  * create by zhangtian on 2019/1/10
  */
object XMLAttributeApp {

  def main(args: Array[String]): Unit = {
    readXML()
  }

  // 读取XML中的属性内容
  def readXML(): Unit ={
    val xml = XML.load(this.getClass.getClassLoader.getResource("pk.xml"))

    // @1 获取xml文件中header节点下的所有的field节点  header \ field
    val headerField = xml \ "header" \ "field"
    println(headerField)

    // 获取xml中所有的field节点  all field用\\
    val fields = xml \\ "field"
    for (field <- fields) {
      println(field)
    }

    // 获取xml中header的field中属性name中的值  找到header中的field  然后通过map对其中所有的field逐个@name
    // val fieldAttributes = (xml \ "header" \ "field").map(_ \ "@name")
    val fieldAttributes = (xml \ "header" \ "field" \\ "@name") // 第二种写法
    for (fieldAttribute <- fieldAttributes) {
      println(fieldAttribute)
    }

    // 找到xml中name="Logon"的message标签
    // 先遍历找到所有的message，然后filter过滤name属性等于Login的标签  _.attribute("name")是个Option  要判断其是否存在
    // val filters = (xml \\ "message").filter(_.attribute("name").exists(_.text.equals("Logon")))
    val filters = (xml \\ "message").filter(x => ((x \ "@name").text).equals("Logon")) // 第二种写法  直接filter拿到单个message对象，再取得该标签的@name，再和Logon做比较
    for (filter <- filters) {
      println(filter)
    }

    // 获取header下field下的所有属性name、required以及文本值text
    (xml \ "header" \ "field").map(x => (x \ "@name", x.text, x \ "@required")).foreach(println)
  }
}
